package field

import (
	"fmt"

	"gitee.com/yanwc/net/utils"
)

type (
	IMEI    utils.BCD8421
	IMEIRaw [8]byte
)

func (imei IMEI) Raw() (out IMEIRaw, err error) {
	l:=len([]rune(imei))

	if l<imei.Min() ||l>imei.Max(){
		return IMEIRaw{}, fmt.Errorf("数字字符串长度在%d~%d之间", imei.Min(),imei.Max())
	}

	v, err := utils.BCD8421(imei).Bytes()
	if err != nil {
		return IMEIRaw{}, err
	}

	copy(out[:], v)
	return
}

func (imei IMEIRaw) Type() (IMEI, error) {
	v, err := utils.NewBCD(imei[:])
	if err != nil {
		return "", err
	}

	return IMEI(v), nil
}

func (imei IMEIRaw) Slice() []byte {
	return imei[:]
}

func (imei IMEI) Max() int {
	return len(IMEIRaw{}) * 2
}

func (imei IMEI) Min() int {
	return len(IMEIRaw{})*2 - 1
}
